package com.github.itdachen.service;

import com.github.itdachen.entity.ProtoTable;
import com.github.itdachen.framework.context.exception.BizException;
import com.github.itdachen.sdk.dto.DevTableColumnDTO;
import com.github.itdachen.sdk.dto.DevTableInfoDTO;
import com.github.itdachen.sdk.query.DevTableInfoQuery;
import com.github.itdachen.sdk.query.ProtoTableQuery;
import com.github.itdachen.sdk.vo.DevTableColumnVO;
import com.github.itdachen.sdk.vo.DevTableInfoVO;
import com.github.itdachen.framework.core.response.TableData;
import jakarta.servlet.http.HttpServletResponse;

import javax.swing.table.TableColumn;
import java.util.List;
import java.util.Map;

/**
 * 代码生成业务表 service
 *
 * @author 王大宸
 * @date 2023-09-23 21:25:55
 */
public interface IDevTableInfoService {

    /***
     * 分页
     *
     * @author 王大宸
     * @date 2023-09-23 21:25:55
     * @param params 查询参数
     * @return com.github.itdachen.framework.core.response.TableData<com.github.itdachen.sdk.vo.DevTableInfoVo>
     */
    TableData<DevTableInfoVO> findDevTableInfoPage(DevTableInfoQuery params) throws Exception;


    /***
     * 查询数据库中的表
     *
     * @author 王大宸
     * @date 2023/4/11 21:05
     * @param query query
     * @return com.github.itdachen.framework.core.response.TableData<com.github.itdachen.framework.code.entity.ProtoTable>
     */
    TableData<ProtoTable> findProtoList(ProtoTableQuery query) throws Exception;

    /***
     * 导入表
     *
     * @author 王大宸
     * @date 2023/9/23 22:44
     * @param tableNames tableNames
     * @return com.github.itdachen.sdk.vo.DevTableInfoVO
     */
    void importTableInfo(String tableNames) throws Exception;


    void saveImpTableInfo(List<ProtoTable> tableList) throws Exception;


    /***
     * 新增
     *
     * @author 王大宸
     * @date 2023-09-23 21:25:55
     * @param devTableInfoDTO 新增数据
     * @return com.github.itdachen.sdk.vo.devTableInfoVO
     */
    DevTableInfoVO saveDevTableInfo(DevTableInfoDTO devTableInfoDTO) throws Exception;

    /***
     * 根据id查询
     *
     * @author 王大宸
     * @date 2023-09-23 21:25:55
     * @param id 需要查询数据的id
     * @return com.github.itdachen.sdk.vo.DevTableInfoVO
     */
    DevTableInfoVO getDevTableInfoById(String id) throws Exception;

    /***
     * 修改
     *
     * @author 王大宸
     * @date 2023-09-23 21:25:55
     * @param devTableInfoDTO 修改数据
     * @return com.github.itdachen.sdk.vo.devTableInfoVo
     */
    DevTableInfoVO updateDevTableInfo(DevTableInfoDTO devTableInfoDTO) throws Exception;

    /***
     * 根据id删除
     *
     * @author 王大宸
     * @date 2023-09-23 21:25:55
     * @param id 需要删除数据的id
     * @return int 影响行数
     */
    int removeDevTableInfo(String id) throws Exception;


    /***
     * 生成代码
     *
     * @author 王大宸
     * @date 2023/10/2 15:57
     * @param tableNames tableNames
     * @param response response
     * @return void
     */
    void downloadCode(String[] tableNames, HttpServletResponse response) throws Exception;

    /***
     * 预览代码
     *
     * @author 王大宸
     * @date 2022/8/16 23:51
     * @param id id
     * @return java.util.Map<java.lang.String, java.lang.String>
     */
    Map<String, String> previewCode(String id) throws Exception;

    /***
    * 添加字段
    *
    * @author 王大宸
    * @date 2023/11/15 17:16
     * @param devTableColumnDTO devTableColumnDTO
    * @return javax.swing.table.TableColumn
    */
    DevTableColumnVO saveTableColumn(DevTableColumnDTO devTableColumnDTO) throws Exception;

}
